// 后台脚本，用于管理酒店配置

// 获取Gitee配置
async function getGiteeConfig() {
  try {
    // 先尝试从存储中获取用户保存的配置
    const storedConfig = await new Promise((resolve) => {
      chrome.storage.local.get(['giteeConfig'], (result) => {
        resolve(result.giteeConfig);
      });
    });

    // 如果有存储的配置，直接返回
    if (storedConfig) {
      return storedConfig;
    }

    // 否则从gitee-config.js文件中获取默认配置
    const response = await fetch(chrome.runtime.getURL('gitee-config.js'));
    const text = await response.text();
    console.log("text",text)
    // 改进的正则表达式，更好地处理包含注释和空格的对象定义
    const match = text.match(/const\s+GITEE_CONFIG\s*=\s*({[\s\S]*?});/);
    if (match && match[1]) {
      try {
        // 添加更严格的错误处理
        console.log("match[1]",match[1])
        return JSON.parse(match[1]);
      } catch (parseError) {
        console.error('解析配置失败:', parseError);
        // 尝试移除注释后再解析
        const textWithoutComments = match[1].replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
        try {
          return JSON.parse(textWithoutComments);
        } catch (secondParseError) {
          console.error('移除注释后仍解析失败:', secondParseError);
        }
      }
    }
  } catch (error) {
    console.error('获取Gitee配置失败:', error);
  }

  // 如果所有尝试都失败，返回默认配置
  return {
    owner: 'fuckv587',
    repo: 'cf',
    path: 'mt-dls/hotel.json',
    token: '',
    branch: 'master'
  };
}

// 默认配置
const DEFAULT_HOTEL_CONFIG = {
  // '常州环球港邮轮酒店': '${userName}  ${roomType}-${mealType} ${startDate}  ${roomNum}${nightNum}  晨风旅行社 房价0   房费预付，杂费自理，房价保密',
  // '常州远洲酒店': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  ',
  // '茅山南湖度假庄园': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  ',
  // '徐州吕梁水街开元颐居度假酒店': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  0',
  // '常州沁悦大酒店（湖塘纺织城店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  0',
  // '常州宝丽格大酒店': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  0',
  // '无锡鲁能万豪酒店': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  ',
  // '常州富都洲际酒店': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  0',
  // '常州万泽酒店（武进春秋淹城店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  0',
  // '维也纳国际酒店（东莞松山湖店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  维也纳国际酒店（东莞松山湖店）',
  // '茗静园·安吉禧玥山居度假酒店': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  茗静园·安吉禧玥山居度假酒店',
  // '常州富力万达嘉华酒店': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  常州富力万达嘉华酒店',
  // '壹宿酒店（滨江万达店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  壹宿酒店（滨江万达店）',
  // '建湖九龙国际大酒店': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}   ${channel}',
  // '南京国际会议大酒店': '客人：${userName}</br>入住：${startDate}</br>离店：${endDate}</br>房型：${roomType}</br>早餐：${mealType}</br>间数： ${roomNum}</br>金额：0</br>渠道：${channel}',
  // '常州都喜天丽富都龙城酒店': '${userName}  ${roomType} <${mealType}>  ${startDate}  ${roomNum}${nightNum}  ${channel} 0 ',
  // '茅山道温泉度假酒店': '预订信息</br>预订日期:${startDate}</br>预订业务员:美团合作</br>预订人:${userName}</br>预订房型:${roomType}</br>房间数量:${roomNum}${nightNum}</br>房费:0/间</br>备注:',
  // '瑞颐康养酒店': '酒店名 : 苏州瑞颐康养酒店</br>入离日期 : ${startDate}~${endDate}  共${nightNum}</br>客人姓名 :  ${userName}</br>预订房型 : ${roomType}-${roomNum} ${mealType}               </br>结算价：0',
  // '常州富都戴斯酒店': '店名 : 常州富都戴斯酒店</br>入离日期 :${startDate}至${endDate}共${nightNum}</br>客人姓名：${userName}</br>预订房型: ${roomType}房  ${mealType} ${roomNum}</br>结算价：0</br>来源：${channel}</br>备注：该客人房费已支付，本公司统一结算。房价保密，杂费自理。</br>发票：本公司开具。</br>烦请确认回复，谢谢',
  // '建德航空小镇君澜度假酒店': '酒店名 : 建德航空小镇君澜度假酒店</br>入离日期 : ${startDate}至${endDate}共${nightNum}</br>客人姓名 :  ${userName}</br>预订房型 : ${roomType}房+${mealType}  ${roomNum}</br>结算：00',
  // '广州百花山庄度假村（增城万达广场店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  广州百花山庄度假村（增城万达广场店）',
  // '溧阳水西·天目湖酒店': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum} 0 ',
  // '南宁荣荣大酒店（江南万达店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  南宁荣荣大酒店（江南万达店）',
  // '艺龙瑞云酒店（河源万隆城喷泉店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum} 0 美团',
  // '德鸿汇金酒店（龙岩动车站店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  售卖价 0 ',
  // '润元酒店（龙岩万宝广场店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  售卖价 0 ',
  // '德鸿兴大洋SMART智能酒店（龙岩站店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  售卖价 0 ',
  // '星辰智能投影酒店（龙岩万宝广场店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  售卖价 0 ',
  // '达曼酒店': '酒店名 :达曼酒店</br> 入离日期 : ${startDate}至${endDate}共${nightNum}</br> 客人姓名 : ${userName}</br> 预订房型 : ${roomType}<${mealType}>- ${roomNum}</br> 结算:0</br> 渠道:美团  ',
  // '德鸿万阳酒店': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}  售卖价 0 ',
  // '维也纳酒店（金坛四中八佰伴店）': '${userName}  ${roomType}-${mealType}  ${startDate}  ${roomNum}${nightNum}  美团 0 ',
  // '逸米s酒店（杭州千岛湖景区店）': '${userName}  ${roomType}-${mealType}  ${startDate}  ${roomNum}${nightNum}  逸米s酒店（杭州千岛湖景区店）',
  // '常州迷霖套房酒店（中华恐龙园店）': '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum} ',
  // '常州金色云庭国际酒店': '${userName}  ${roomType}-${mealType}  ${startDate}  ${roomNum}${nightNum} 0',
  // '常州金色云庭国际酒店': '${userName}  ${roomType}-${mealType}  ${startDate}  ${roomNum}${nightNum} 000',
  // "艺龙瑞云酒店（河源亚洲第一高喷泉店）": '${userName}  ${roomType}<${mealType}> ${startDate}  ${roomNum}${nightNum}  000 ${channel}',
  // "石家庄长安万达美华轻尚酒店": '${userName}  ${roomType}-${mealType} ${startDate}  ${roomNum}${nightNum}  ${channel} 000',
  // "苏州雍景山庄": '${userName}  ${roomType} ${mealType}  ${startDate}  ${roomNum}${nightNum}',
  // "常州迷霖套房酒店（中华恐龙园店）": '${userName}  ${roomType} ${mealType} ${startDate}  ${roomNum}${nightNum}',
  // "常州经开区福朋喜来登酒店": '公司：常州方向标网络科技有限公司</br>姓名：${userName}</br>入住日期:${startDate}</br>离店日期:${endDate}</br>房型:  ${roomType}</br>房价：000 ${mealType}</br>房间数：${roomNum}</br>付款方式：退房联系销售</br>确认号：',
  // "苏州清山会议中心": '${userName}  ${roomType}-${mealType}  ${startDate}  ${roomNum}${nightNum}  券号：'
};

// 初始化存储
chrome.runtime.onInstalled.addListener(() => {
  chrome.storage.local.get(['hotelConfig'], (result) => {
    if (!result.hotelConfig) {
      chrome.storage.local.set({ hotelConfig: DEFAULT_HOTEL_CONFIG });
    }
  });
});

// 监听来自内容脚本的消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.action === 'getHotelConfig') {
    chrome.storage.local.get(['hotelConfig'], (result) => {
      sendResponse({ config: result.hotelConfig || DEFAULT_HOTEL_CONFIG });
    });
    return true; // 保持消息通道开放
  }

  if (request.action === 'updateHotelConfig') {
    chrome.storage.local.set({ hotelConfig: request.config }, () => {
      sendResponse({ success: true });
    });
    return true;
  }

  // 同步配置到Gitee
  if (request.action === 'syncToGitee') {
    chrome.storage.local.get(['hotelConfig'], async (result) => {
      const config = result.hotelConfig || DEFAULT_HOTEL_CONFIG;
      const syncResult = await syncToGitee(config);
      sendResponse(syncResult);
    });
    return true; // 保持消息通道开放
  }

  // 从Gitee获取配置
  if (request.action === 'fetchFromGitee') {
    fetchConfigFromGitee().then(config => {
      if (config) {
        chrome.storage.local.set({ hotelConfig: config }, () => {
          sendResponse({ success: true, config: config });
        });
      } else {
        sendResponse({ success: false, error: '获取配置失败' });
      }
    });
    return true; // 保持消息通道开放
  }

  // 获取同步状态
  if (request.action === 'getSyncStatus') {
    chrome.storage.local.get(['lastSyncTime', 'syncStatus', 'lastSyncError', 'lastFetchTime', 'fetchStatus', 'lastFetchError'], (result) => {
      sendResponse(result);
    });
    return true; // 保持消息通道开放
  }

  // 测试Gitee连接
  if (request.action === 'testGiteeConnection') {
    testGiteeConnection().then(result => {
      sendResponse(result);
    }).catch(error => {
      sendResponse({ success: false, error: error.message });
    });
    return true; // 保持消息通道开放
  }
});

// 测试Gitee连接功能
async function testGiteeConnection() {
  try {
    // 获取Gitee配置
    const giteeConfig = await getGiteeConfig();

    // 验证必要的配置字段
    if (!giteeConfig.owner || !giteeConfig.repo || !giteeConfig.token) {
      return {
        success: false,
        error: 'Gitee配置不完整，请检查仓库所有者、仓库名称和Token'
      };
    }

    // 测试连接的URL（使用Gitee API的用户信息接口）
    const testUrl = 'https://gitee.com/api/v5/user';

    // 发送测试请求
    const response = await fetch(testUrl, {
      method: 'GET',
      headers: {
        'Authorization': `token ${giteeConfig.token}`,
        'Accept': 'application/json'
      }
    });

    // 检查响应状态
    if (response.ok) {
      // 尝试获取仓库信息以进一步验证权限
      const repoUrl = `https://gitee.com/api/v5/repos/${giteeConfig.owner}/${giteeConfig.repo}`;
      const repoResponse = await fetch(repoUrl, {
        headers: {
          'Authorization': `token ${giteeConfig.token}`,
          'Accept': 'application/json'
        }
      });

      if (repoResponse.ok) {
        // 仓库访问也成功
        return {
          success: true,
          info: {
            message: '连接成功，Token有效且有权限访问指定仓库',
            repoAccessible: true
          }
        };
      } else {
        // Token有效但可能没有仓库权限
        const repoData = await repoResponse.json();
        return {
          success: true,
          info: {
            message: 'Token有效但可能没有访问仓库的权限',
            repoAccessible: false,
            repoError: repoData.message || '未知仓库访问错误'
          }
        };
      }
    } else {
      // 连接失败
      const errorData = await response.json();
      return {
        success: false,
        error: errorData.message || 'Token无效或连接失败'
      };
    }
  } catch (error) {
    console.error('测试Gitee连接时发生错误:', error);
    return {
      success: false,
      error: error.message || '连接测试失败，请检查网络或Gitee配置'
    };
  }
}

// Gitee API 同步功能
async function syncToGitee(config) {
  console.log("config",config)
  if(Object.keys(config).length === 0){
    return { success: true };
  }
  try {
    const giteeConfig = await getGiteeConfig();

    if (!giteeConfig.token || giteeConfig.token === 'your-gitee-token') {
      console.log('Gitee token未配置，跳过同步');
      return { success: false, error: 'Gitee token未配置' };
    }

    // 获取当前文件的SHA（如果存在）
    const getFileUrl = `https://gitee.com/api/v5/repos/${giteeConfig.owner}/${giteeConfig.repo}/contents/${giteeConfig.path}?ref=${giteeConfig.branch}`;

    let sha = null;
    try {
      const fileResponse = await fetch(getFileUrl, {
        headers: {
          'Authorization': `token ${giteeConfig.token}`
        }
      });

      if (fileResponse.ok) {
        const fileData = await fileResponse.json();
        sha = fileData.sha;
      }
    } catch (error) {
      console.log('文件不存在或获取失败，将创建新文件');
    }

    // 准备文件内容
    const content = JSON.stringify(config, null, 2);
    const encodedContent = btoa(unescape(encodeURIComponent(content)));

    // 创建或更新文件
    const updateUrl = `https://gitee.com/api/v5/repos/${giteeConfig.owner}/${giteeConfig.repo}/contents/${giteeConfig.path}`;

    const body = {
      message: `更新酒店配置 - ${new Date().toLocaleString('zh-CN')}`,
      content: encodedContent,
      branch: giteeConfig.branch
    };

    if (sha) {
      body.sha = sha; // 如果是更新文件，需要提供SHA
    }

    const response = await fetch(updateUrl, {
      method: 'PUT',
      headers: {
        'Authorization': `token ${giteeConfig.token}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(body)
    });

    if (response.ok) {
      console.log('配置同步到Gitee成功');

      // 保存同步状态
      chrome.storage.local.set({
        lastSyncTime: new Date().toISOString(),
        syncStatus: 'success'
      });

      return { success: true };
    } else {
      const errorData = await response.json();
      console.error('同步到Gitee失败:', errorData);

      chrome.storage.local.set({
        syncStatus: 'error',
        lastSyncError: errorData.message || '未知错误'
      });

      return { success: false, error: errorData.message || '同步失败' };
    }
  } catch (error) {
    console.error('同步到Gitee时发生错误:', error);

    chrome.storage.local.set({
      syncStatus: 'error',
      lastSyncError: error.message
    });

    return { success: false, error: error.message };
  }
}

// 从Gitee获取配置
async function fetchConfigFromGitee() {
  try {
    const giteeConfig = await getGiteeConfig();

    if (!giteeConfig.token || giteeConfig.token === 'your-gitee-token') {
      console.log('Gitee token未配置，跳过远程获取');
      return null;
    }

    const url = `https://gitee.com/api/v5/repos/${giteeConfig.owner}/${giteeConfig.repo}/contents/${giteeConfig.path}?ref=${giteeConfig.branch}`;

    const response = await fetch(url, {
      headers: {
        'Authorization': `token ${giteeConfig.token}`
      }
    });

    if (response.ok) {
      const data = await response.json();
      const content = decodeURIComponent(escape(atob(data.content)));
      const config = JSON.parse(content);

      console.log('从Gitee成功获取配置');

      chrome.storage.local.set({
        lastFetchTime: new Date().toISOString(),
        fetchStatus: 'success'
      });

      return config;
    } else {
      console.log('从Gitee获取配置失败，可能文件不存在');
      return null;
    }
  } catch (error) {
    console.error('从Gitee获取配置时发生错误:', error);

    chrome.storage.local.set({
      fetchStatus: 'error',
      lastFetchError: error.message
    });

    return null;
  }
}

// 定期从远程服务器更新配置
async function updateConfigFromRemote() {
  try {
    const remoteConfig = await fetchConfigFromGitee();

    if (remoteConfig && Object.keys(remoteConfig).length > 0) {
      chrome.storage.local.set({ hotelConfig: remoteConfig });
      console.log('远程配置更新成功');
    } else {
      console.log('远程配置为空或获取失败，使用本地配置');
    }
  } catch (error) {
    console.log('远程配置更新失败，使用本地配置:', error);
  }
}

// 每小时尝试更新一次配置
setInterval(updateConfigFromRemote, 60 * 60 * 1000);

// 监听配置变更，自动同步到Gitee
chrome.storage.onChanged.addListener((changes, namespace) => {
  if (namespace === 'local' && changes.hotelConfig) {
    console.log('检测到配置变更，准备同步到Gitee...');

    // 延迟同步，避免频繁更新
    setTimeout(async () => {
      const result = await chrome.storage.local.get(['hotelConfig', 'autoSync']);

      // 检查是否启用自动同步
      if (result.autoSync !== false) { // 默认启用
        const syncResult = await syncToGitee(result.hotelConfig || DEFAULT_HOTEL_CONFIG);

        if (syncResult.success) {
          console.log('配置自动同步成功');
        } else {
          console.log('配置自动同步失败:', syncResult.error);
        }
      }
    }, 5000); // 延迟5秒执行
  }
});
